package com.woniuxy.yoga.course.service.service;

import com.woniuxy.yoga.commons.core.model.PageInfo;
import com.woniuxy.yoga.course.dao.model.OrdinaryCourse;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.yoga.course.model.form.ordinary.AmountOrdinaryCourseDurationForm;
import com.woniuxy.yoga.course.model.dto.ordinary.OrdinaryCourseDTO;
import com.woniuxy.yoga.course.model.param.ordinary.*;

import java.util.List;

/**
 * <p>
 * 普通课程表 服务类
 * </p>
 *
 * @author 韦用文,刘存益,郎腾霄
 * @since 2023年11月28日
 */
public interface OrdinaryCourseService extends IService<OrdinaryCourse> {

    /**
     * 教练ID查询普通课程信息
     * @param ids
     * @return
     */
    List<OrdinaryCourseDTO> getByCoachId(List<Integer> ids);

    /**
     * 新增普通课程
     * @param param
     */
    void addOrdinaryCourse(AddOrdinaryCourseParam param);

    /**
     * 普通课程开课
     * @param courseId
     */
    void startOrdinaryCourse(Integer courseId);

    /**
     * 普通课程取消
     * @param courseId
     */
    void cancelOrdinaryCourse(Integer courseId);

    /**
     * 普通课程完成
     * @param courseId
     */
    void completeOrdinaryCourse(Integer courseId);

    /**
     * 普通课程当前人数加一
     * @param courseId
     */
    void increaseCurrentCount(Integer courseId) throws Exception;

    /**
     * 教室ID查询普通课程
     * @param classroomId
     * @return
     */
    List<OrdinaryCourseDTO> getByClassroomId(Integer classroomId);

    /**
     * 查询正常的普通课程
     * @param param
     * @return
     */
    PageInfo queryNormalOrdinaryCourse(QueryNormalOrdinaryCourseParam param);

    /**
     * 商家查询所有的普通课程
     * @param param
     * @return
     */
    PageInfo queryAllOrdinaryCourse(QueryAllOrdinaryCourseParam param);

    /**
     * 教练查询自己的普通课程
     * @param param
     * @return
     */
    PageInfo queryCoachOrdinaryCourse(QueryCoachOrdinaryCourseParam param);

    /**
     * 统计该时间段普通课程已完成的总时长
     * @param amountOrdinaryCourseDurationForm
     * @return
     */
    Integer amountOrdinaryCourseDuration(AmountOrdinaryCourseDurationParam param);

    /**
     * 普通课程当前预约人数减一
     * @param courseId
     */
    void reduceCurrentCount(Integer courseId);
}
